﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.Linq;
using System.Web;
using System.Web.Mvc;
using HitchHikersGuideToTheGalaxy.Helpers;

namespace HitchHikersGuideToTheGalaxy.Models
{
    [Bind(Include = "SSN,FirstName,FirstName,LastName,Mobile,Phone,Address,Email,ZipCode,Password,DateOfBirth,UserRoleId,Gender,Username")]
    public partial class UserInfo
    {
        public bool IsValid
        {
            get { return (GetRuleViolations().Count() == 0); }
        }

        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            if (!SSNValidator.IsValidSSN(SSN))
                yield return new RuleViolation("Kennitalan stenst ekki vartölutékk", "SSN");

            if ((FirstName.Length < 2) || (FirstName.Length > 20))
                yield return new RuleViolation("Gert er ráð fyrir að fornafn sé ekki færri en 2 stafir og ekki fleiri en 20.", "FirstName");

            if ((LastName.Length < 2) || (LastName.Length > 20))
                yield return new RuleViolation("Gert er ráð fyrir að eftirnafn sé ekki færri en 2 stafir og ekki fleiri en 20.", "LastName");

            if (!PhoneValidator.IsValidNumber(Phone, "Iceland"))
                yield return new RuleViolation("Heimasími á að vera 7 tölustafir að lengd", "Phone");

            if (!MobileValidator.IsValidNumber(Mobile, "Iceland"))
                yield return new RuleViolation("Farsímanúmer á að vera 7 tölustafir að lengd", "Mobile");

            if (String.IsNullOrEmpty(Address))
                yield return new RuleViolation("Það þarf að slá inn heimilisfang", "Address");

            if (!EmailValidator.IsValidEmail(Email))
                yield return new RuleViolation("Það þarf að slá inn tölvupóstfang", "Email");

            //if (String.IsNullOrEmpty(Gender.ToString()) || (!Gender.Equals("M")) || (!Gender.Equals("F")) )
            if (!((Gender == 'M') || (Gender == 'F')))
                yield return new RuleViolation("Það þarf að velja kyn", "Gender");

            yield break;
        }

        partial void OnValidate(ChangeAction action)
        {
            if (!IsValid)
                throw new ApplicationException("Rule violations prevent saving in UserInfo.cs");
        }
    }
}
